//package com.ants.platform.core.plugins.solr;
//
//import com.ants.platform.core.enums.DataType;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.solr.client.solrj.ResponseParser;
//import org.apache.solr.client.solrj.SolrQuery;
//import org.apache.solr.client.solrj.impl.HttpSolrClient;
//import org.apache.solr.client.solrj.impl.XMLResponseParser;
//import org.apache.solr.client.solrj.request.UpdateRequest;
//import org.apache.solr.client.solrj.response.QueryResponse;
//import org.apache.solr.client.solrj.response.UpdateResponse;
//import org.apache.solr.common.SolrDocumentList;
//import org.apache.solr.common.SolrInputDocument;
//import org.apache.solr.common.params.SolrParams;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.InitializingBean;
//import org.springframework.beans.factory.annotation.Value;
//
//import java.util.*;
//
///**
// * <dependency>
// *  <groupId>org.apache.solr</groupId>
// *  <artifactId>solr-solrj</artifactId>
// *  <version>5.5.0</version>
// * </dependency>
// * Created by liushun on 2016/7/22.
// */
////@Service
//public class SolrManager implements InitializingBean {
//
//    protected static final Logger logger = LoggerFactory.getLogger(SolrManager.class);
//
//    private HttpSolrClient solrClient = null;
//
//    @Value("${http.solr.url:}")
//    private String solrServerUrl;
//
//    @Value("${http.solr.connectionTimeout:100}")
//    private int connectionTimeout;
//
//    @Value("${http.solr.defaultMaxConnectionsPerHost:100}")
//    private int defaultMaxConnectionsPerHost;
//
//    @Value("${http.solr.maxTotalConnections:100}")
//    private int maxTotalConnections;
//
//    @Value("${http.solr.coreName:}")
//    private String coreName;
//
//    //初始化solr连接
//    public void InitSolrManger() {
//        try {
//            solrClient = new HttpSolrClient(solrServerUrl + "/" + coreName);
//            solrClient.setConnectionTimeout(100);
//            solrClient.setDefaultMaxConnectionsPerHost(100);
//            solrClient.setMaxTotalConnections(100);
//        } catch (Exception e) {
//            throw new RuntimeException("请检查tomcat服务器或端口是否开启!");
//        }
//    }
//
//    public void afterPropertiesSet() throws Exception {
//        if (StringUtils.isEmpty(solrServerUrl))
//            throw new RuntimeException("注入了Solr功能，配置文件中却没有配置solr主机: http.solr.url");
//        else if (StringUtils.isEmpty(coreName))
//            throw new RuntimeException("注入了Solr功能，配置文件中却没有配置默认core: http.solr.coreName");
//        else {
//            InitSolrManger();
//            logger.info("\n=============================================================================================" +
//                    "\n===========================  连接 " + solrServerUrl + " 初始化 Solr 成功!" +
//                    "\n=============================================================================================");
//        }
//
//    }
//
//
//    /**
//     * 查询 solr不传递Core时默认为默认core
//     *
//     * @param coreName    core 名称, 如: core1 core0
//     * @param seachParams 查询参数, 与 solr 后台 一 一对应
//     * @return
//     */
//    public QueryResponse query(String coreName, SolrSearch seachParams) {
//        if (!StringUtils.isEmpty(coreName))
//            solrClient = new HttpSolrClient(solrServerUrl + "/" + coreName);
//        if (StringUtils.isEmpty(coreName) || null == seachParams) {
//            logger.error("没有传递有效core文件库参数!!");
//            return null;
//        }
//
//        SolrQuery params = new SolrQuery();
//
//        if (StringUtils.isNoneEmpty(seachParams.getQ())) {
//            params.add("q", seachParams.getQ());
//        }
//        if (StringUtils.isNotEmpty(seachParams.getSort())) {
//            params.add("sort", seachParams.getSort());
//        }
//        if (null != seachParams.getWt()) {
//            params.add("wt", seachParams.getWt().getType());
//        }
//
//        // 分页查询
//        if (null == seachParams.getPageNum() || seachParams.getPageNum() <= 0) {
//            seachParams.setPageNum(1);
//        }
//        if (null == seachParams.getPageSize() || seachParams.getPageSize() <= 0) {
//            seachParams.setPageSize(10);
//        }
//        params.add("start", String.valueOf(((seachParams.getPageNum() - 1) * seachParams.getPageSize())));
//        params.add("rows", seachParams.getPageSize().toString());
//
//        try {
//            QueryResponse rsp = solrClient.query(params);
//            return rsp;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//    }
//
//    public QueryResponse query(SolrSearch solrParams) {
//        return query(null, solrParams);
//    }
//
//    /**
//     * 添加文档到solr库
//     * @param list 数据键值对集合
//     * @param coreName core名称
//     * @return
//     */
//    public boolean addDocs(List<Map> list, String coreName) {
//        if (!StringUtils.isEmpty(coreName)) solrClient = new HttpSolrClient(solrServerUrl + "/" + coreName);
//        try {
//            logger.debug("====================== add doc ===================");
//            Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
//            for(Map map:list){
//                SolrInputDocument document = new SolrInputDocument();
//                Set<Map.Entry<String, Object>> it = map.entrySet();
//                for(Map.Entry<String, Object> e:it){
//                    document.addField(e.getKey(), e.getValue());
//                }
//                docs.add(document);
//            }
//            UpdateResponse rsp = solrClient.add(docs);
//            logger.debug("Add doc size" + docs.size() + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());
//            //提交文档
//            solrClient.commit();
//            logger.debug("commit doc to index" + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());
//        } catch (Exception e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//
//    public boolean addDocs(List<Map> list){
//        return addDocs(list, null);
//    }
//
//    /**
//     * 根据索引ID删除solr文档
//     * @param id
//     * @param coreName
//     * @return
//     */
//    public boolean deleteById(String id, String coreName) {
//        if (!StringUtils.isEmpty(coreName)) solrClient = new HttpSolrClient(solrServerUrl + "/" + coreName);
//        try {
//            logger.debug("====================== delete doc ===================");
//            UpdateResponse rsp = solrClient.deleteById(id);
//            solrClient.commit();
//            logger.debug("delete id:" + id + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//    public boolean deleteById(String id){
//        return deleteById(id, null);
//    }
//
//    public void deleteById(List<String> list, String coreName){
//        for(String id:list)
//            deleteById(id, coreName);
//    }
//    public void deleteById(List<String> list){
//        for(String id:list)
//            deleteById(id, null);
//    }
//
//    /**
//     * 根据查询参数进行删除比如(*:*)
//     * @param queryParams 查询参数
//     */
//    public boolean deleteQuery(String queryParams, String coreName) {
//        if (!StringUtils.isEmpty(coreName)) solrClient = new HttpSolrClient(solrServerUrl + "/" + coreName);
//        try {
//            logger.debug("====================== delete core ===================");
//            UpdateRequest commit = new UpdateRequest();
//            commit.deleteByQuery(queryParams);
//            commit.setCommitWithin(5000);
//            commit.process(solrClient);
//            logger.debug("url:"+commit.getPath()+"\t xml:"+commit.getXML()+" method:"+commit.getMethod());
//        } catch (Exception e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//
//    public boolean deleteQuery(String queryParams){
//        return deleteQuery(queryParams, null);
//    }
//
//
//    /**
//     * 修改单个solr文档
//     * @param id 文档索引ID
//     * @param map 字段名称和字段值
//     * @param coreName core库
//     * @return
//     */
//    public boolean updateDoc(String id, Map<String, Object> map, String coreName) {
//        if (!StringUtils.isEmpty(coreName)) solrClient = new HttpSolrClient(solrServerUrl + "/" + coreName);
//        try {
//            logger.debug("====================== update field ===================");
//            SolrInputDocument doc = new SolrInputDocument();
//            doc.addField("id", id);
//            Set<Map.Entry<String, Object>> it = map.entrySet();
//            for(Map.Entry<String, Object> e:it)
//                doc.addField(e.getKey(), e.getValue());
//            UpdateResponse rsp = solrClient.add(doc);
//            System.out.println("update doc id" + id + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime());
//            UpdateResponse rspCommit = solrClient.commit();
//            logger.debug("commit doc to index" + " result:" + rspCommit.getStatus() + " Qtime:" + rspCommit.getQTime());
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//
//    public boolean updateDoc(String id, Map<String, Object> map){
//        return updateDoc(id, map, null);
//    }
//
//}
